#!/usr/bin/python
# -*- coding: utf-8 -*-  
"""
@Project : hello 
@file : log_helper.py
@Author : sheen
@time : 2025/5/16 11:11
@func : 常用工具-日志工具
"""
import logging
import os
import sys
from datetime import datetime


def configure_logging(
        log_dir: str = r"E:\PycharmProjects\myProject\aswatson\for_cdc\logs",
        filename_prefix: str = None,
        file_level: int = logging.DEBUG,
        console_level: int = logging.INFO,
        log_format: str = None,
        date_format: str = None
) -> None:
    """
    配置日志记录器，支持文件和控制台双重输出

    :param log_dir: 日志目录路径，默认为当前脚本所在目录的logs文件夹
    :param filename_prefix: 日志文件名前缀，默认为主脚本文件名
    :param file_level: 文件日志级别，默认为DEBUG
    :param console_level: 控制台日志级别，默认为INFO
    :param log_format: 日志格式字符串
    :param date_format: 日期格式字符串
    :return: 无返回值
    """
    # 参数默认值处理
    if log_dir is None:
        log_dir = os.path.join(os.path.dirname(sys.argv[0]), "logs")

    filename_prefix = filename_prefix or os.path.splitext(os.path.basename(sys.argv[0]))[0]
    log_format = log_format or "[%(asctime)s] [%(levelname)-8s] [%(filename)s:%(lineno)d] %(message)s"
    date_format = date_format or "%Y-%m-%d %H:%M:%S"

    try:
        os.makedirs(log_dir, exist_ok=True)
    except OSError as e:
        raise RuntimeError(f"创建日志目录失败: {e}") from e

    # 生成带精确时间的日志文件名
    # timestamp = datetime.now().strftime('%Y%m%d%H%M%S')
    timestamp = datetime.now().strftime('%Y%m%d%H')
    log_file = os.path.join(log_dir, f"{timestamp}_{filename_prefix}.log")

    logger = logging.getLogger()
    logger.setLevel(logging.DEBUG)  # 设置全局最低级别

    # 清除所有现有处理器
    for handler in logger.handlers[:]:
        logger.removeHandler(handler)
        handler.close()

    # 文件处理器（始终添加）
    file_handler = logging.FileHandler(log_file, encoding="utf-8")
    file_handler.setLevel(file_level)

    # 控制台处理器
    console_handler = logging.StreamHandler()
    console_handler.setLevel(console_level)

    # 统一格式化器
    formatter = logging.Formatter(log_format, datefmt=date_format)
    file_handler.setFormatter(formatter)
    console_handler.setFormatter(formatter)

    # 添加处理器
    logger.addHandler(file_handler)
    logger.addHandler(console_handler)


if __name__ == "__main__":
    configure_logging()
    logging.info("日志系统配置完成")
    name="日志系统配置完成"
    logging.info(name.center(100, '-'))
